package com.cw.gui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;

import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;

class IconCellRenderer extends JLabel implements TreeCellRenderer {
	protected Color m_bkNonSelectionColor;
	protected Color m_bkSelectionColor;
	protected Color m_borderSelectionColor;
	protected boolean m_selected;
	protected Color m_textNonSelectionColor;

	protected Color m_textSelectionColor;

	public IconCellRenderer() {
		super();
		m_textSelectionColor = UIManager.getColor("Tree.selectionForeground");
		m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
		m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
		m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
		m_borderSelectionColor = UIManager
				.getColor("Tree.selectionBorderColor");
		setOpaque(false);
	}

	public Component getTreeCellRendererComponent(JTree tree, Object value,
			boolean sel, boolean expanded, boolean leaf, int row,
			boolean hasFocus) {
		DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
		Object obj = node.getUserObject();
		setText(obj.toString());
		if (obj instanceof IconData) {
			IconData idata = (IconData) obj;
			if (expanded) {
				setIcon(idata.getOpenIcon());
			} else {
				setIcon(idata.getIcon());
			}
		}
		// else if(obj instanceof cp.gui.action.Node6Data){
		// cp.gui.action.Node6Data ndata = (cp.gui.action.Node6Data) obj;
		// if(expanded){
		// setIcon(ndata.getOpenIcon());
		// }
		// else{
		// setIcon(ndata.getIcon());
		// }
		// }
		else {
			setIcon(null);

		}
		setFont(tree.getFont());
		setForeground(sel ? m_textSelectionColor : m_textNonSelectionColor);
		setBackground(sel ? m_bkSelectionColor : m_bkNonSelectionColor);
		m_selected = sel;
		return this;
	}

	public void paint(Graphics g) {
		Color bColor = getBackground();
		Icon icon = getIcon();

		g.setColor(bColor);
		int offset = 0;
		if (icon != null && getText() != null) {
			offset = (icon.getIconWidth() + getIconTextGap());
		}
		g.fillRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
		if (m_selected) {
			g.setColor(m_borderSelectionColor);
			g.drawRect(offset, 0, getWidth() - 1 - offset, getHeight() - 1);
		}

		super.paint(g);
	}
}
